Линейные уравнения и матрицы

Решение систем линейных алгебраических уравнений

        Функция LinearSolve(m, b, meth, fr, conj, in, opts, mopts) по матрице коэффициентов m размером p´q и вектору свободных членов b длины p решает систему линейных алгебраических уравнений вида m.x = b, где x – вектор столбец неизвестных длины q. Элементы m и компоненты b могут быть числовыми и (или) символьными величинами. В результате вычислений или возвращается вектор столбец решений, возможно со свободными переменными, или сообщение о несовместности системы, то есть об отсутствии решений.

        Из курса алгебры известна следующая теорема Кронекера-Капелли. Система линейной алгебраических уравнений m.x = b совместна тогда и только тогда, когда ранг матрицы m равен рангу расширенной матрицы m | b. Здесь m | b – это <<m> | <b>>, то есть присоединение вектора b справа к m.

        Матричное уравнение m.x = b соответствует записи системы в форме:

 

                                   (1)

 

        Все аргументы в LinearSolve, кроме первого, не являются обязательными. При отсутствии b первые q–1 столбцов m задают матрицу коэффициентов системы, а последний q-й столбец m – вектор свободных членов. Если b есть матрица размера p´r, то одновременно решаются r систем вида m.Column(b, k) (k = 1, 2, …, r). При этом ответ формируется в виде матрицы размером p´r, в которой k-й столбец является решением k-й системы. Остальные аргументы  имеют следующий смысл: 

·       meth – опция, записываемая в виде method = na, где na Î {none, solve, subs, Cholesky, LU, QR, hybrid, SparseLU, SparseDirect и SparseIterative}. Значение na задает метод решения системы (1). По умолчанию метод выбирается системой в зависимости от формы m и типа ее элементов.

·       fr – опция, записываемая в виде free = name, где name имя для возможных свободных переменных системы. По умолчанию это _t1 (или _t2, или _t3, );

·       conj – опция, записываемая в виде conjugate = lo, где lo Î {true, false}. В декомпозиционных методах Cholesky и QR при lo = true и при отсутствии опции conj используется эрмитово сопряжение, а иначе – транспонирование;

·       in – опция, записываемая в виде inplace = lo, где lo Î {true, false}. При lo = true результат формируется на месте свободного члена b. При lo = false и при отсутствии опции in вычисления не затрагивают исходных данных. Во избежание потерь данных опция должна использоваться осторожно. Кроме того, при lo = true нельзя использовать аргумент opts; 

·       opts конструктор опций результата;

·       mopts – опция, записываемая в виде methodoptions = li. Элементы списка li задают опции, контролирующие используемый метод. Пока этот аргумент работает только для метода SparseIterative.

        Примеры 1.  Решение систем линейных алгебраических уравнений.

> 

m := Matrix([[a, b], [c, d]]):        # с символьными   

{Shift+¿}

 

r := Vector([g, h]):                             # элементами

{Shift+¿}

 

s := LinearSolve(m, r):

{Shift+¿}

 

m, r, Transpose(s);

{¿}

> 

m := Matrix([[1, 5], [2, 4]]):             # две системы

{Shift+¿}

 

b := Matrix([[11, 1], [10, 2]]):

{Shift+¿}

 

s := LinearSolve(m, b):

{Shift+¿}

 

m, b, s;

{¿}

> 

seq(m.Column(s, k) = Column(b, k), k = 1..2);

{¿}

> 

m := Matrix([[1, 5, 2], [-2, 4, 7]]):                 # p < q

{Shift+¿}

 

b := Vector([2, 3]):

{Shift+¿}

 

s1 := LinearSolve(m, b):

{Shift+¿}

 

s2 := LinearSolve(m, b, free = x): m, b, s1, s2;

{¿}

> 

m.s1-b,  m.s2-b;

{¿}

> 

m := Matrix([[1, 6], [1, -3], [2, 3]]):              # p > q

{Shift+¿}

 

b := Vector([8, -1, 7]):

{Shift+¿}

 

r1 := Rank(m): r2 := Rank(<<m> | <b>>):

{Shift+¿}

 

s := LinearSolve(m, b, inplace):

{Shift+¿}

 

r1, r2, map(Transpose, [s, b]);

{¿}

> 

m := Matrix([[1, 6, 8], [1, -3, -1]]):      # b опущено

{Shift+¿}

 

s := LinearSolve(m): m, s;

{¿}

> 

pr1 := DeleteColumn(m, 3).s-Column(m, 3):

{Shift+¿}

 

pr2 := DeleteColumn(m, -1).s-Column(m, -1):

{Shift+¿}

 

pr3 := SubMatrix(m, 1..2, 1..2).s-Column(m, 3):

{Shift+¿}

 

pr4 := SubMatrix(m, 1..-1, 1..-2).s-Column(m, 3):

{Shift+¿}

 

pr5 := m[1..-1, 1..-2].s-Column(m, -1):

{Shift+¿}

 

pr1, pr2, pr3, pr4, pr5;

{¿}

> 

m := Matrix([[1, 6], [1, -3]]):           # замещение b

{Shift+¿}

 

b := Vector([8, -1]):

{Shift+¿}

 

s := LinearSolve(m, b, inplace): s, b;

{¿}

Генерирование уравнений и матриц

        Функция GenerateEquations(m, v, b) по матрице коэффициентов m размером p´q, вектору столбцу имен переменных v длины q и вектору столбцу свободных членов b длины p генерирует список линейных алгебраических уравнений (1). Аргумент b необязателен.

        При отсутствии b и длине v, равной q, генерируется список из уравнений системы вида m.v = ZeroVector(p).

        При отсутствии b и длине v, равной q1, генерируется список из уравнений системы вида m[1..-1, 1..-2].v = m[1..-1,-1]. Иными словами, первые q–1 столбцов m задают матрицу коэффициентов системы, а последний q-й столбец m – вектор свободных членов.

        Функция GenerateMatrix(eqns, v, aug, opts) по списку или множеству линейных алгебраических уравнений eqns и списку или множеству имен переменных v возвращает матрицу коэффициентов m соответствующей системы уравнений и ее вектор столбец свободных членов b. Уравнения в списке eqns вида a = 0 можно задавать их левой частью a. Аргументы aug и opts в A необязательны, а смысл их следующий:

·       augопция вида augmented = lo, где lo Î {true, false}. Она определяет вид формируемого результата. При отсутствии опции aug и при lo = false результат возвращается в виде последовательности m, b, а при lo = true и при заданиии aug словом augmented – в виде m | b (<<m> | <b>>), то есть в форме присоединения вектора b справа к m.

·       opts конструктор опций результата:

        Примеры 2. Генерирование систем линейных алгебраических уравнений по матрице коэффициентов и вектору свободных членов. Формирование матрицы коэффициентов и вектора свободных членов по системе линейных алгебраических уравнений.

> 

m := Matrix([[1, 3, 2], [2, -4, 5]]):

{Shift+¿}

 

va := [x, y, z]: b := Vector([13, 7]):

{Shift+¿}

 

m, va, b;

{¿}

> 

eq := GenerateEquations(m, va, b);

{¿}

> 

LinearSolve(m, b, free = w), solve(eq, va);

{¿}

> 

tt := solve(eq, va): tt[1]; op(tt); op(tt[1]);

{¿}

> 

w := [w1, w2, w3]: eqns := GenerateEquations(m, w, b);

{¿}

> 

GenerateMatrix(eqns, w), GenerateMatrix(eqns, w, augmented);

{¿}

> 

eq := [a1*x+a2*y+a3*z = f, a2*x+a3*y+a1*z = g]:

{Shift+¿}

 

GenerateMatrix(eq, [x, y, z]), GenerateMatrix(eq, [a1, a2, a3]);

{¿}

Гауссовы исключения. Приведение матрицы к ступенчатому виду

        Функция GaussianElimination(m) для прямоугольной матрицы m с числовыми или символьными элементами, возвращает верхнюю треугольную матрицу U того же размера, что и m. Вычисления реализуются исключениями Гаусса. Выполнение функции равносильно декомпозиции LUDecomposition(m, output = [U]), то есть выводу верхней треугольной матрицы U в PLU-разложении m.

        Функция GaussianElimination(m, me, opts) выполняется аналогично со следующими изменениями и дополнениями, специфицируемыми необязательными аргументами me и opts:

·       me – опция, задающая используемый метод, и, записываемая в виде method = na, где na Î {GaussianElimination, FractionFree};

·       optsконструктор опций результата;

        Функция ReducedRowEchelonForm(m) для прямоугольной матрицы m с числовыми или символьными элементами возвращает ее верхнюю ступенчатую форму R. Вычисления реализуются исключениями Гаусса-Жордана. Выполнение C равносильно декомпозиции LUDecomposition(m, output = [R]), то есть выводу верхней ступенчатой матрицы R в PLU1R-разложении m.

        Заметим, что при исключениях Гаусса подстановки реализуются во все строки с номерами большими номера текущей (ведущей) строки, а при исключениях Гаусса-Жордана – во все строки, кроме текущей строки.

        Функция BackwardSubstitute(m, b, fr, in, opts) решает систему линейных алгебраических уравнений m.x = b с верхней ступенчатой матрицей m размером p´q и вектором b длины q. Если b – матрица размером q´t, то одновременно решается t систем, свободные члены которых есть столбцы b. Если b не задано, то решается система SubMatrix(m, 1..-1, 1..-2).x = SubMatrix(m, 1..-1, -1). Необязательные аргументы fr, in и opts имеют тот же смысл, что и одноименные аргументы функции LinearSolve.

        Функция ForwardSubstitute(m, b, fr, in, opts) выполняется аналогично, но здесь m – нижняя ступенчатая матрица. 

        Примеры 3.  Гауссовы исключения и приведение матрицы к ступенчатой форме.

> 

m := Matrix([[2, t, 1], [2, 1, -1], [8, 2, -1]]):

{Shift+¿}

 

a := GaussianElimination(m):

{Shift+¿}

 

b := LUDecomposition(m, output = [U]):

{Shift+¿}

 

m, a, b-a;

{¿}

> 

m := Matrix([[7, 0, 7, 8, 1], [16, 0, 16, 3, 13],

{Shift+¿}

 

   [9, 4, 1, 6, 12], [7, -4, 15, -3, 1]]):

{Shift+¿}

 

Rank(m), m, GaussianElimination(m);

{¿}

> 

s := ReducedRowEchelonForm(m):

{Shift+¿}

 

b := LUDecomposition(m, output = [R]): s, b-s;

{¿}

> 

Transpose(BackwardSubstitute(s, free = x));

{¿}

Метод наименьших квадратов

        Функция LeastSquares(m, b, optim, fr, conj, opts) методом наименьших квадратов решает одну или несколько систем линейных алгебраических уравнений вида n.x = c, где n – матрица размером p´q, а с – вектор-столбец длины p. Если de = n.xc, то отыскивается такой вектор x длины q, для которого величина нормы

 

Norm(de, 2) = VectorNorm(de, 2) =
 

принимает наименьшее значение. При отсутствии комплексных элементов в n и c норма вычисляется как sqrt(add(de[k]2, k = 1..p)).     

        Аргументы имеют следующий смысл:

·       m – матрица размером p´q или множенство из p линейных уравнений с q неизвестными. В последнем случае b должно быть множеством с q неизвестными;

·       b – вектор-столбец, матрица или множество. Если b – вектор длины p, то решается одна система m.x = b. Если b – матрица размером p´s, то решается s систем вида m.x = b[1..-1, k] (k = 1, 2, …, s). Если b – множество из q неизвестных, то решается система с этими неизвестными, заданная множеством уравнений m;

·       optim – необязательная опция, специфицирующая оптимизацию в случае, когда получено параметризованное решение задачи. Записывается опция в виде optimize = lo, где lo Î {true, false}. При lo = true и при задании опции optim словом optimize возвращается такое решение x, для которого минимальна норма Norm(x, 2). При отсутствии опции optim и при lo = false решение возвращается в общем виде;

·       fr – необязательная опция, задающая имя свободных переменных в параметризованном решении задачи. Записывается опция в виде free = No­UserValue или free = na, где na – имя переменной. При free = na используется переменная na, а во всех остальных случаях – переменная _t#, где # – пусто или целое число;

·       conj – необязательная опция, специфицирующая использование при нахождении решения эрмитова сопряжения. Записывается она в виде conjugate = lo, где lo Î {true, false}. При отсутствии опции conj, при lo = true и при записи опции словом conjugate используется эрмитово сопряжение. При lo = false используется обычное транспонирование матриц;

·       optsконструктор опций результата;

        Отметим, что для матриц m с элементами типа float или complex при p > q решение ищется с помощью QR-декомпозиции, а при p < q – с помощью сингулярной декомпозиции. Во всех иных случаях поиск решения проводится с использованием нормальной системы уравнений.

         Примеры 4. Решение систем линейных алгебраических уравнений методом наименьших квадратов.

> 

m := Matrix([[1, 6], [2, 1], [3, -1]]): b := Vector([2, 1, 3]):

{Shift+¿}

 

x := LeastSquares(m, b): z := m.x-b:

{Shift+¿}

 

'm' = m, 'b' = b, 'x' = x;

{¿}

> 

de := Transpose(abs((evalf[5])(z))):

{Shift+¿}

 

'de' = de, evalf[5](sqrt(z[1]^2+ z[2]^2+z[3]^2));

{¿}

> 

no1 := evalf[9](Norm(z, 2)): no2 := evalf[9](VectorNorm(z, 2)):

{Shift+¿}

 

'no1' = no1, 'no2' = no2;

{¿}

> 

m := Matrix([[1, 6, 5, 1], [2, 1, 9, 3], [3, -1, 1, 2]]):

{Shift+¿}

 

b := Vector([2, 1, 3]): m, b;

{¿}

> 

x := LeastSquares(m, b):

{Shift+¿}

 

Transpose(x), Transpose(m.x-b);

{¿}

> 

y := LeastSquares(m, b, optimize):

{Shift+¿}

 

Transpose(y), Norm(y, 2), evalf[3](Norm(y, 2));

{¿}

Декомпозиция матриц

PLU-декомпозиция, PLU1R- декомпозиция, декомпозиция Холецкого

        Функция LUDecomposition(m) для матрицы m вычисляет ее PLU-декомпозицию (факторизацию, разложение), возвращая последовательность из трех матриц P, L и U  таких, что m = P.L.U, где:

·       P – матрица перестановок размером p´p. Произведение L.U имеет те же самые строки, что и m, но порядок их расположения может быть иным. Домножая P слева на L.U мы получает в точности матрицу m;

·       L – нижняя треугольная матрица размером p´p с единичными элементами на главной диагонали;

·       U – верхняя треугольная матрица размером p´q.

        Функция LUDecomposition(m, method = RREF) для матрицы m вычисляет PLU1R-декомпозицию, возвращая последовательность из четырех матриц P, L, U1 и R таких, что m = P.L.U1.R, где:

·       P, L – такие же матрицы, как и в PLU-декомпозиции m;

·       U1 – верхняя треугольная матрица размером p´p;

·       R  – верхняя треугольная ступенчатая матрица размером p´q, причем U1.R = U, где U – соответствующая матрица из PLU-декомпозиции m.

        Результаты вычислений по B и по LUDecomposition(m, output = ['P', 'L', 'U1', 'R']) одинаковы.

        Функция LUDecomposition(m, method = Cholesky). Предполагается, что в данном случае m квадратная эрмитова положительно определенная матрица. Тогда вычисляется декомпозиция Холецкого матрицы m и возвращается нижняя треугольная матрица L с неотрицательными диагональными элементами такая, что m = L.L* (L* = HermitianTranspose(L)). При этом L* является положительно определенной матрицей.

        Функция LUDecomposition(m, me, out, conj, in, opts) является расширением функций для вычисления PLU-декомпозиции, PLU1R-декомпозиции или декомпозиции Холецкого. Смысл ее аргументов от второго и далее следующий:

·       me – опция, записываемая в виде method = na, где na Î {GaussianElimination, RREF, FractionFree, Cholesky, none}. Значение na задает метод декомпозиции (факторизации) m. По умолчанию используется метод none, эквивалентный методу GaussianElimination;

·       out – опция, записываемая в виде output = obj, где obj Î {'P', 'L', 'U', 'U1', 'R', 'NAG', 'determinant', 'rank'}. Значение obj указывает возвращаемый объект. Списком можно задать несколько таких объектов. Возвращаться они будут в порядке следования в списке. Поместить 'U' в список вместе с 'U1' или 'R' нельзя. Объект rank инициирует вывод ранга матрицы m. Объект 'determinant' для квадратной матрицы m инициирует вывод определителя m.

        Объект 'NAG' может быть задан или один, или вместе с объектами rank и (или) determinant. Он реализует компактную форму вывода матриц P, L и U, упаковывая их в вектор-столбец X длины s = min(p, q) и в матрицу Y размером p´q. Причем в левую нижнюю часть Y помещается заведомо ненулевая часть L без единичных диагональных элементов. В остальной части Y располагается заведомо ненулевая часть U. Вектор X = (x1, x2, …, xs) таков, что его элементы xk (k = 1, 2, …, s) задают последовательные транспозиции в перестановке a = (1, 2, …, p). А именно, x1 предписывает поменять местами в a элементы в позициях 1 и x1, x2 предписывает поменять местами в полученной перестановке элементы в позициях 2 и x2 и т. д. В результате таких действий a преобразуется в перестановку b = (b1, b2, …, bp), по которой однозначно восстанавливается P: единицы в P стоят в позициях (bk, k) (k = 1, 2, …, p), а остальные элементы P – нули (см. пример 39);

·       conj – опция, записываемая в виде conjugate = lo, где lo Î {true, false}. Она используется только в случае декомпозиции Холецкого. При отсутствии опции conjugate и при lo = true при вычислениях используется эрмитово сопряжение, а при lo = false – обычное транспонирование;

·       in – опция, записываемая в виде inplace = lo, где lo Î {true, false}. Она используется только при наличии в списке вывода объектов U или NAG. При lo = true и при опции in, заданной одним словом inplace, результат вычислений замещает первый аргумент. При lo = false и при отсутствии опции in исходные данные не изменяются. Опции in и opts не совместимы друг с другом;

·       opts – конструктор опций результата. Аргумент opts записывается в виде outputoptions[obj] = li, где obj Î {'P', 'L', 'U', 'U1', 'R', 'NAG'}, li – список опций.  

        Примеры 5. Вычисление для матриц PLU-декомпозиции, PLU1R-де­композиции и декомпозиции Холецкого.

> 

# PLU-декомпозиция

{Shift+¿}

 

m := Matrix([[2, 1, 1, 7], [2, 1, -1, 0], [8, 2, -1, 3]]):

{Shift+¿}

 

P, L, U := LUDecomposition(m);

{¿}

> 

m, P.L.U;

{¿}

> 

LUDecomposition(m, output = ['NAG', rank]);

{¿}

> 

# PLU1R-декомпозиция

{Shift+¿}

 

LUDecomposition(m, method = RREF);

{¿}

> 

P, L, U1, R := LUDecomposition(m, output = ['P', 'L', 'U1', 'R']);

{¿}

 

P, L, U1, R := те же матрицы, что и при method = RREF

 

> 

Equal(m, P.L.U1.R), Equal(U, U1.R);

{¿}

> 

# декомпозиция Холецкого

{Shift+¿}

 

h := Matrix([[4, 1, 3], [1, 4, 1], [3, 1, 6]]):

{Shift+¿}

 

h, IsDefinite(h);

{¿}

 

L := LUDecomposition(h, method = Cholesky):

{Shift+¿}

 

H := HermitianTranspose(L): L, L.H, IsDefinite(H);

{¿}

        Примеры 6.  Написать процедуру plufromnag, которая по матрице m  вычисляет ее PLU-декомпозицию в форме NAG и без использоваия функций A-D формирует и возвращает матрицы P, L и U так, как они представлены в обычной “распакованной” PLU-декомпозиции m.

        Решение. Ниже приведен один из возможных вариантов решения поставленной задачи и реализованы вычисления для трех контрольных примеров.

> 

restart: with(LinearAlgebra):

{¿}

> 

plufromnag := proc(m)

{Shift+¿}

 

   local v, nag, p, q, i, j, w, r, P, L, U;

{Shift+¿}

 

   v, nag := LUDecomposition(m, output = 'NAG');

{Shift+¿}

 

   p, q := Dimension(nag):                         # формирование L

{Shift+¿}

 

   L := Matrix(p): for j from 1 to p do L[j, j] := 1 end do;

{Shift+¿}

 

   for i from 1 to p do for j from 1 to min(i, q)-1 do

{Shift+¿}

 

      L[i, j] := nag[i, j];

{Shift+¿}

 

   end do: end do;

{Shift+¿}

 

   U := Copy(nag);                                     # формирование U

{Shift+¿}

 

   for i from 2 to p do for j from 1 to min(i-1, q) do

{Shift+¿}

 

      U[i, j] := 0;

{Shift+¿}

 

   end do: end do;

{Shift+¿}

 

   P := Matrix(p): w := <seq(j, j = 1..p)>;  # формирование P

{Shift+¿}

 

   for i from 1 to Dimension(v) do

{Shift+¿}

 

      j := v[i]: r := w[i]: w[i] := w[j]: w[j] := r;

{Shift+¿}

 

   end do;

{Shift+¿}

 

   for j from 1 to p do P[w[j], j]:=1 end do;

{Shift+¿}

 

end proc:

{¿}

> 

# вычисления по процедуре plufromnag

{¿}

 

m := Matrix([[1, 2], [4, 5]]):                                                # 1

{Shift+¿}

 

P, L, U := plufromnag(m): m, P, L, U, Equal(P.L.U, m);

{¿}

> 

m := Matrix([[1, 2, 3], [4, 5, 6]]):                                         #2

{Shift+¿}

 

P, L, U := plufromnag(m): m, P, L, U, Equal(P.L.U, m);

{¿}

> 

m := Matrix([[1, 2, 3], [4, 5, 6], [8, 5, 2], [2, 7, 5]]):            #3

{Shift+¿}

 

P, L, U := plufromnag(m): m, P, L, U;

{¿}

QR-декомпозиция

        Функция QRDecomposition(m, fs, out, conj, opts, …). Напомним, что ранг матрицы m называется полным, если он равен минимальному значению из числа строк и числа столбцов m. По A реализуется QR-декомпозиция матрицы m размером p´q с числовыми или символьными элементами. Аргументы от второго и далее необязательны и имеют следующий смысл:

·       fs – опция, записываемая в виде fullspan = lo, где lo Î {true, false}. В случае если lo = true, или fs задана одним словом fullspan, или m имеет полный ранг, то проводится полное QR-разложение m. То есть, возвращается последовательность из унитарной матрицы Q размером p´p и верхней треугольной матрицы R размером p´q, причем m = Q.R, а унитарность Q означает, что Q.HermitianMatrix(Q) = IdentityMatrix(p). В случае если ранг r матрицы m не является полным, и опция fs отсутствует или lo = false, то проводится так называемое неполное Q1R1 разложение m. То есть, возвращается последовательность из матрицы Q1 размером p´r и верхней треугольной матрицы R1 размером r´q, причем m = Q1.R1;

·       out – опция, специфицирующая вычисляемые объекты и порядок их вывода. Записывается она в виде output = obj, где obj принадлежит множеству {Q, R, NAG, rank} или является списком некоторых элементов этого множества. Значение NAG инициирует вывод Q и R в специальном формате и используется только тогда, когда элементы m заданы в плавающей форме;

·       conj – опция, специфицирующая при нахождении QR-декомпозиции использование эрмитова сопряжения. Записывается она в виде conjugate = lo, где lo Î {true, false}. При отсутствии опции conj, при lo = true и при записи опции одним словом conjugate используется эрмитово сопряжение. При lo = false используется обычное транспонирование матриц;

·       opts конструктор опций результата, записываемый в виде output­options[o] = li, где o Î {Q, R, NAG} и li – список опций.

        Примеры 7. QR-декомпозиция матриц.

> 

m := Matrix([[1, 2, 1, 1], [0, 1, 2, 1], [1, 0, 0, 2]]): m, Rank(m);

{Shift+¿}

 

Q, R := QRDecomposition(m);

{¿}

> 

Equal(Q.R, m), Q.HermitianTranspose(Q);

{¿}

> 

m := Matrix([[1, 2, 1, 1], [0, 1, 2, 1], [1, 3, 3, 2]]):

{Shift+¿}

 

Q, R, r := QRDecomposition(m, fullspan, output = [Q, R, rank]);

{Shift+¿}

 

r, Q.R-m, Q.HermitianTranspose(Q);

{¿}

Приведение квадратной матрицы к Жордановой форме

        Функция JordanForm(m, out, opts)

        Примеры 8. 

> 

li := [[8/3, -5/3, 0], [4/15, 74/15, 9/5], [-8/15, 2/15, 7/5]]:

{Shift+¿}

 

m := Matrix(li): Q, J := JordanForm(m, output = ['Q', 'J']):

{Shift+¿}

 

m, Q, J;

{¿}

> 

Equal(MatrixInverse(Q).m.Q, J);

{¿}

> 

Equal(Q.J.MatrixInverse(Q), m);

{¿}

Задания:

1. Решить систему линейных уравнений  матричным способом. Предусмотреть проверку на невырожденность матрицы А. Генерацию элементов матриц A и B осуществить с использованием генератора случайных чисел.

2. Решить систему линейных алгебраических уравнений методом Крамера. Генерацию элементов матриц A и B осуществить с использованием генератора случайных чисел.

3. Решить систему линейных алгебраических уравнений методом исключения неизвестных (Гаусса). Генерацию элементов матриц A и B осуществить с использованием генератора случайных чисел.